/**
 * @author: 刘凯利
 * @day: 2022.02.11
 */
// import { login, logout, getInfo } from '@/api/user'
import { login, getInfo } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
// 重定向 router
// import router, { resetRouter } from '@/router'
import { Message } from 'element-ui'
const state = {
  // 用户token
  token: getToken(),
  // 用户名称
  name: '',
  // 用户头像
  avatar: '',
  // 用户id
  userId: '',
  // 用户邮箱
  email: ''

}
const mutations = {
  // 用户token
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  // 用户name
  SET_NAME: (state, name) => {
    state.name = name
  },
  // 用户id
  SET_USERUID: (state, userId) => {
    state.userId = userId
  },
  // 用户头像
  SET_AVATAR: (state, avatar) => {
    state.avatar = avatar
  },
  // 用户邮箱
  SET_EMAIL: (state, email) => {
    state.email = email
  }

}
/**
 * @param 用户登录
 */
const actions = {
  login ({ commit }, userInfo) {
    console.log('1.登录')
    // 解构出用户名和密码
    const { username, password } = userInfo
    return new Promise((resolve, reject) => {
      // 调用api/user里面的login方法
      login({ username: username.trim(), password: password }).then(response => {
        // 判断是否登录成功
        if (response.code === 200 || response.code === 20000) {
          // 结构data
          const { data } = response
          console.log(data.token)
          // 把后端返回的token存到vuex中
          commit('SET_TOKEN', data.token)
          // 把后端返回的token存到cookies里面
          setToken(data.token)
          resolve()
        } else {
          // 进行报错 提示用户
          Message.error(response.message || '登录失败')
        }
      }).catch(error => {
        reject(error)
      })
    })
  },
  /**
   * @param 获取用户数据userInfo
   */
  getInfo ({ commit, state }) {
    console.log('2.获取用户userInfo')
    return new Promise((resolve, reject) => {
      console.log(state.token)
      // 调用api/user里面的getInfo方法获取用户信息和权限信息
      getInfo(state.token).then(response => {
        // 结构data数据
        const { data } = response
        // 判断是存在数据
        if (!data) {
          reject('获取用户数据失败请重试,或联系it部门进行检测.')
        }
        // 结构用户的数据
        //  uid 用户id
        // avatar 用户头像
        // fullname 用户名称
        // email 用户邮箱
        const { uid, avatar, fullname, email } = data
        // 把用户数据分别储存到Vuex中
        commit('SET_USERUID', uid)
        commit('SET_NAME', fullname)
        commit('SET_AVATAR', avatar)
        commit('SET_EMAIL', email)
        // 返回数据
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  /**
   * @param 作废接口功能
   */
  generateRoutes ({ commit, state }) {
    // return new Promise((resolve, reject) => {
    //   // 调用api/user里面的getInfo方法获取用户信息和权限信息
    //   getrolesList(state.token).then(response => {
    //     // // 结构data数据
    //     // const { data } = response
    //     // // 判断是存在数据
    //     // if (!data) {
    //     //   reject('获取失败请重试,或联系it部门进行检测.')
    //     // }
    //     // //! 提取元素权限

    //     // // console.log(roles)
    //     // // //! 把元素权限存到Vuex中
    //     // // commit('SET_ROLES', roles)
    //     // // 返回数据
    //     // resolve(data)
    //   }).catch(error => {
    //     reject(error)
    //   })
    // })
  },
  /**
   * @param 用户退出
   */
  logout ({ commit, state, dispatch }) {
    return new Promise(resolve => {
      console.log('退出')
      // 删除Vuex token
      commit('SET_TOKEN', '')
      // 删除Vuex 元素权限合集
      commit('SET_ROLES', [])
      // 清空
      removeToken()
      // 刷新跳转
      window.location.href = '/login'
      resolve()
    })
    //! 这里注释 调用接口退出
    // return new Promise((resolve, reject) => {
    //   logout(state.token).then(() => {
    //     commit('SET_TOKEN', '')
    //     commit('SET_ROLES', [])
    //     removeToken()
    //     resetRouter()

    //     // reset visited views and cached views
    //     // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
    //     dispatch('tagsView/delAllViews', null, { root: true })

    //     resolve()
    //   }).catch(error => {
    //     reject(error)
    //   })
    // })
  },
  /**
 *  @param 登录异常处理(绝不让他进系统)
 */
  resetToken ({ commit }) {
    console.log('删除')
    // //! 这里注释
    return new Promise(resolve => {
      // 删除Vuex token
      commit('SET_TOKEN', '')
      // 删除Vuex 元素权限合集
      commit('SET_ROLES', [])
      // 清空
      removeToken()
      resolve()
    })
  }

  // // dynamically modify permissions
  // async changeRoles ({ commit, dispatch }, role) {
  //   const token = role + '-token'

  //   commit('SET_TOKEN', token)
  //   setToken(token)

  //   const { roles } = await dispatch('getInfo')

  //   resetRouter()

  //   // generate accessible routes map based on roles
  //   const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
  //   // dynamically add accessible routes
  //   router.addRoutes(accessRoutes)

  //   // reset visited views and cached views
  //   dispatch('tagsView/delAllViews', null, { root: true })
  // }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
